背景介绍
LSGAN(Least Squares Generative Adversarial Networks, 最小二乘生成式对抗网络):于2016年提出,分析了GAN网络中使用的交叉熵损失函数时可能会导致在饱和区收敛速度太慢,而且提出了一种新的最小二乘损失函数代替,构建了一个更加稳定,收敛更快,质量更高的生成式对抗网络。
LSGAN特点
保持GAN的网络结构不变,仅仅将判别器网络最后的sigmoid删去,并且将损失函数由二分类交叉熵修改为均方差。
LSGAN图像分析
TensorFlow2.0实现
1 | import os |
模型运行结果
小技巧
- 图像输入可以先将其归一化到0-1之间或者-1-1之间,因为网络的参数一般都比较小,所以归一化后计算方便,收敛较快。
- 注意其中的一些维度变换和numpy,tensorflow常用操作,否则在阅读代码时可能会产生一些困难。
- 可以设置一些权重的保存方式,学习率的下降方式和早停方式。
- LSGAN对于网络结构,优化器参数,网络层的一些超参数都是非常敏感的,效果不好不容易发现原因,这可能需要较多的工程实践经验。
- 先创建判别器,然后进行compile,这样判别器就固定了,然后创建生成器时,不要训练判别器,需要将判别器的trainable改成False,此时不会影响之前固定的判别器,这个可以通过模型的_collection_collected_trainable_weights属性查看,如果该属性为空,则模型不训练,否则模型可以训练,compile之后,该属性固定,无论后面如何修改trainable,只要不重新compile,都不影响训练。
- 本博客中的LSGAN是在GAN的基础上修改了sigmoid函数和损失函数,当然小伙伴们也可以尝试在DCGAN,CGAN等模型上进行尝试。
LSGAN小结
LSGAN在提出时对网络的损失函数进行了大量的分析,我不是大佬,也不对数学公式进行过多的阐述,可能我说了会让小伙伴们更加迷糊,因此有需要的小伙伴们可以去网上搜索相关资料。因为LSGAN基本没有修改网络结构,只是更换了一个激活函数和损失函数,因此网络参数和GAN完全相同。